home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 44 / PC Actual CD 44.iso / Linux / Cygwin / full.exe / Disk1 / data1.cab / Tools / include / tix.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-12-04  |  13.4 KB  |  464 lines

  1. /*
  2.  * tix.h --
  3.  *
  4.  *    This is the standard header file for all tix C code. It
  5.  *    defines many macros and utility functions to make it easier to
  6.  *    write TCL commands and TK widgets in C. No more needs to write
  7.  *    2000 line functions!
  8.  *
  9.  * Copyright (c) 1996, Expert Interface Technologies
  10.  *
  11.  * See the file "license.terms" for information on usage and redistribution
  12.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13.  *
  14.  */
  15.  
  16. #ifndef _TIX_H_
  17. #define _TIX_H_
  18.  
  19. #ifndef TIX_VERSION
  20. #define TIX_VERSION    "4.1"
  21. #endif
  22. #define TIX_PATCHLEVEL    "4.1.0"
  23. #define TIX_PATCH_LEVEL TIX_PATCHLEVEL
  24.  
  25. #define TIX_RELEASE     "4.1.0.005"
  26.  
  27. #ifndef RC_INVOKED
  28.  
  29. #ifndef _TK
  30. #include <tk.h>
  31. #endif
  32.  
  33. #ifndef _TCL
  34. #include <tcl.h>
  35. #endif
  36.  
  37. #if defined(__WIN32__) || defined(_WIN32) || defined (__BORLAND) || defined(_Windows)
  38. #ifndef _WINDOWS
  39. #define _WINDOWS
  40. #endif
  41. #endif
  42.  
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46.  
  47. #if (TCL_MAJOR_VERSION > 7)
  48. #  define TCL_7_5_OR_LATER
  49. #else
  50. #  if ((TCL_MAJOR_VERSION == 7) && (TCL_MINOR_VERSION >= 5))
  51. #    define TCL_7_5_OR_LATER
  52. #  endif
  53. #endif
  54.  
  55.  
  56. #if (TK_MAJOR_VERSION > 4)
  57. #  define TK_4_1_OR_LATER
  58. #else
  59. #  if ((TK_MAJOR_VERSION == 4) && (TK_MINOR_VERSION >= 1))
  60. #    define TK_4_1_OR_LATER
  61. #  endif
  62. #endif /* TK_MAJOR_VERSION ... */
  63.  
  64. #if (TK_MAJOR_VERSION >= 8)
  65. #  define TK_8_0_OR_LATER
  66. #endif
  67.  
  68. #ifdef TK_4_1_OR_LATER
  69.     /* TK 4.1 or later */
  70. #  define Tix_FreeProc Tcl_FreeProc
  71.  
  72. #else
  73.     /* TK 4.0 */
  74. #  define Tix_FreeProc Tk_FreeProc
  75.  
  76.     /* These portable features were not defined in previous versions of
  77.      * TK but are used in Tix. Let's define them here.
  78.      */
  79. #  define TkPutImage(a, b, c, d, e, f, g, h, i, j, k, l) \
  80.     XPutImage(c, d, e, f, g, h, i, j, k, l)
  81.  
  82. #  define TkStringToKeysym XStringToKeysym 
  83.  
  84. #endif /* TK_4_1_OR_LATER */
  85.  
  86.  
  87. #define TIX_STDIN_ALWAYS    0
  88. #define TIX_STDIN_OPTIONAL    1
  89. #define TIX_STDIN_NONE        2
  90.  
  91. typedef struct {
  92.     char *name;            /* Name of command. */
  93.     int (*cmdProc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp,
  94.                 int argc, char **argv));
  95.                 /* Command procedure. */
  96. } Tix_TclCmd;
  97.  
  98.  
  99. /*----------------------------------------------------------------------
  100.  *
  101.  *
  102.  *             SUB-COMMAND HANDLING
  103.  *
  104.  *
  105.  *----------------------------------------------------------------------
  106.  */
  107. typedef int (*Tix_CmdProc) _ANSI_ARGS_((ClientData clientData,
  108.     Tcl_Interp *interp, int argc, char ** argv));
  109. typedef int (*Tix_SubCmdProc) _ANSI_ARGS_((ClientData clientData,
  110.     Tcl_Interp *interp, int argc, char ** argv));
  111. typedef int (*Tix_CheckArgvProc) _ANSI_ARGS_((ClientData clientData,
  112.     Tcl_Interp *interp, int argc, char ** argv));
  113.  
  114. typedef struct _Tix_CmdInfo {
  115.     int        numSubCmds;
  116.     int        minargc;
  117.     int        maxargc;
  118.     char      * info;
  119. } Tix_CmdInfo;
  120.  
  121. typedef struct _Tix_SubCmdInfo {
  122.     int            namelen;
  123.     char                * name;
  124.     int            minargc;
  125.     int            maxargc;
  126.     Tix_SubCmdProc     proc;
  127.     char                * info;
  128.     Tix_CheckArgvProc   checkArgvProc;
  129. } Tix_SubCmdInfo;
  130.  
  131. /*
  132.  * Tix_ArraySize --
  133.  *
  134.  *    Find out the number of elements inside a C array. The argument "x"
  135.  * must be a valid C array. Pointers don't work.
  136.  */
  137. #define Tix_ArraySize(x) (sizeof(x) / sizeof(x[0]))
  138.  
  139. /*
  140.  * This is used for Tix_CmdInfo.maxargc and Tix_SubCmdInfo.maxargc,
  141.  * indicating that this command takes a variable number of arguments.
  142.  */
  143. #define TIX_VAR_ARGS           -1
  144.  
  145. /*
  146.  * TIX_DEFAULT_LEN --
  147.  *
  148.  * Use this for Tix_SubCmdInfo.namelen and Tix_ExecSubCmds() will try to
  149.  * determine the length of the subcommand name for you.
  150.  */
  151. #define TIX_DEFAULT_LEN           -1
  152.  
  153. /*
  154.  * TIX_DEFAULT_SUB_CMD --
  155.  *
  156.  * Use this for Tix_SubCmdInfo.name. This will match any subcommand name,
  157.  * including the empty string, when Tix_ExecSubCmds() finds a subcommand
  158.  * to execute.
  159.  */
  160. #define TIX_DEFAULT_SUBCMD    0
  161.  
  162. /*
  163.  * TIX_DECLARE_CMD --
  164.  *
  165.  * This is just a handy macro to declare a C function to use as a
  166.  * command function.
  167.  */
  168. #define TIX_DECLARE_CMD(func) \
  169.     int func _ANSI_ARGS_((ClientData clientData,\
  170.     Tcl_Interp *interp, int argc, char ** argv))
  171.  
  172. /*
  173.  * TIX_DECLARE_SUBCMD --
  174.  *
  175.  * This is just a handy macro to declare a C function to use as a
  176.  * sub command function.
  177.  */
  178. #define TIX_DECLARE_SUBCMD(func) \
  179.     int func _ANSI_ARGS_((ClientData clientData,\
  180.     Tcl_Interp *interp, int argc, char ** argv))
  181.  
  182. /*
  183.  * TIX_DEFINE_CMD --
  184.  *
  185.  * This is just a handy macro to define a C function to use as a
  186.  * command function.
  187.  */
  188. #define TIX_DEFINE_CMD(func) \
  189. int func(clientData, interp, argc, argv) \
  190.     ClientData clientData;    /* Main window associated with     \
  191.                  * interpreter. */        \
  192.     Tcl_Interp *interp;        /* Current interpreter. */    \
  193.     int argc;            /* Number of arguments. */    \
  194.     char **argv;        /* Argument strings. */
  195.  
  196.  
  197. /*----------------------------------------------------------------------
  198.  * Link-list functions --
  199.  *
  200.  *    These functions makes it easy to use link lists in C code.
  201.  *
  202.  *----------------------------------------------------------------------
  203.  */
  204. typedef struct Tix_ListInfo {
  205.     int nextOffset;        /* offset of the "next" pointer in a list
  206.                  * item */
  207.     int prevOffset;        /* offset of the "next" pointer in a list
  208.                  * item */
  209. } Tix_ListInfo;
  210.  
  211.  
  212. /* Singly-linked list */
  213. typedef struct Tix_LinkList {
  214.     int numItems;        /* number of items in this list */
  215.     char * head;        /* (general pointer) head of the list */
  216.     char * tail;        /* (general pointer) tail of the list */
  217. } Tix_LinkList;
  218.  
  219. typedef struct Tix_ListIterator {
  220.     char * last;
  221.     char * curr;
  222.     unsigned int started : 1;   /* True if the search operation has
  223.                  * already started for this list */
  224.     unsigned int deleted : 1;    /* True if a delete operation has been
  225.                  * performed on the current item (in this
  226.                  * case the curr pointer has already been
  227.                  * adjusted
  228.                  */
  229. } Tix_ListIterator;
  230.  
  231. #define Tix_IsLinkListEmpty(list)  ((list.numItems) == 0)
  232. #define TIX_UNIQUE 1
  233. #define TIX_UNDEFINED -1
  234.  
  235. /*----------------------------------------------------------------------
  236.  * General Single Link List --
  237.  *
  238.  *    The next pointer can be anywhere inside a link.
  239.  *----------------------------------------------------------------------
  240.  */
  241.  
  242. EXTERN void         Tix_LinkListInit _ANSI_ARGS_((Tix_LinkList * lPtr));
  243. EXTERN void        Tix_LinkListAppend _ANSI_ARGS_((Tix_ListInfo * infoPtr,
  244.                 Tix_LinkList * lPtr, char * itemPtr, int flags));
  245. EXTERN void        Tix_LinkListStart _ANSI_ARGS_((Tix_ListInfo * infoPtr,
  246.                 Tix_LinkList * lPtr, Tix_ListIterator * liPtr));
  247. EXTERN void        Tix_LinkListNext _ANSI_ARGS_((Tix_ListInfo * infoPtr,
  248.                 Tix_LinkList * lPtr, Tix_ListIterator * liPtr));
  249. EXTERN void        Tix_LinkListDelete _ANSI_ARGS_((Tix_ListInfo * infoPtr,
  250.                 Tix_LinkList * lPtr, Tix_ListIterator * liPtr));
  251. EXTERN int        Tix_LinkListDeleteRange _ANSI_ARGS_((
  252.                 Tix_ListInfo * infoPtr, Tix_LinkList * lPtr,
  253.                 char * fromPtr, char * toPtr,
  254.                 Tix_ListIterator * liPtr));
  255. EXTERN int        Tix_LinkListFind _ANSI_ARGS_((
  256.                 Tix_ListInfo * infoPtr, Tix_LinkList * lPtr,
  257.                 char * itemPtr, Tix_ListIterator * liPtr));
  258. EXTERN int        Tix_LinkListFindAndDelete _ANSI_ARGS_((
  259.                 Tix_ListInfo * infoPtr, Tix_LinkList * lPtr,
  260.                 char * itemPtr, Tix_ListIterator * liPtr));
  261. EXTERN void        Tix_LinkListInsert _ANSI_ARGS_((
  262.                 Tix_ListInfo * infoPtr,
  263.                 Tix_LinkList * lPtr, char * itemPtr,
  264.                 Tix_ListIterator * liPtr));
  265. EXTERN void        Tix_LinkListIteratorInit _ANSI_ARGS_((
  266.                 Tix_ListIterator * liPtr));
  267.  
  268. #define Tix_LinkListDone(liPtr) ((liPtr)->curr == NULL)
  269.  
  270.  
  271. /*----------------------------------------------------------------------
  272.  * Simple Single Link List --
  273.  *
  274.  *    The next pointer is always offset 0 in the link structure.
  275.  *----------------------------------------------------------------------
  276.  */
  277.  
  278. EXTERN void         Tix_SimpleListInit _ANSI_ARGS_((Tix_LinkList * lPtr));
  279. EXTERN void        Tix_SimpleListAppend _ANSI_ARGS_((
  280.                 Tix_LinkList * lPtr, char * itemPtr, int flags));
  281. EXTERN void        Tix_SimpleListStart _ANSI_ARGS_((
  282.                 Tix_LinkList * lPtr, Tix_ListIterator * liPtr));
  283. EXTERN void        Tix_SimpleListNext _ANSI_ARGS_((
  284.                 Tix_LinkList * lPtr, Tix_ListIterator * liPtr));
  285. EXTERN void        Tix_SimpleListDelete _ANSI_ARGS_((
  286.                 Tix_LinkList * lPtr, Tix_ListIterator * liPtr));
  287. EXTERN int        Tix_SimpleListDeleteRange _ANSI_ARGS_((
  288.                 Tix_LinkList * lPtr,
  289.                 char * fromPtr, char * toPtr,
  290.                 Tix_ListIterator * liPtr));
  291. EXTERN int        Tix_SimpleListFind _ANSI_ARGS_((
  292.                 Tix_LinkList * lPtr,
  293.                 char * itemPtr, Tix_ListIterator * liPtr));
  294. EXTERN int        Tix_SimpleListFindAndDelete _ANSI_ARGS_((
  295.                 Tix_LinkList * lPtr, char * itemPtr,
  296.                 Tix_ListIterator * liPtr));
  297. EXTERN void        Tix_SimpleListInsert _ANSI_ARGS_((
  298.                 Tix_LinkList * lPtr, char * itemPtr,
  299.                 Tix_ListIterator * liPtr));
  300. EXTERN void        Tix_SimpleListIteratorInit _ANSI_ARGS_((
  301.                 Tix_ListIterator * liPtr));
  302.  
  303. #define Tix_SimpleListDone(liPtr) ((liPtr)->curr == NULL)
  304.  
  305. /*----------------------------------------------------------------------
  306.  *
  307.  *
  308.  *
  309.  *              CUSTOM CONFIG OPTIONS
  310.  *
  311.  *
  312.  *----------------------------------------------------------------------
  313.  */
  314. #define TIX_RELIEF_RAISED    1
  315. #define TIX_RELIEF_FLAT        2
  316. #define TIX_RELIEF_SUNKEN    4
  317. #define TIX_RELIEF_GROOVE    8
  318. #define TIX_RELIEF_RIDGE    16
  319. #define TIX_RELIEF_SOLID    32
  320.  
  321. typedef int Tix_Relief;
  322.  
  323. extern Tk_CustomOption tixConfigItemType;
  324. extern Tk_CustomOption tixConfigItemStyle;
  325. extern Tk_CustomOption tixConfigRelief;
  326.  
  327. /*
  328.  * C functions exported by Tix
  329.  */
  330.  
  331. EXTERN int        Tix_ArgcError _ANSI_ARGS_((Tcl_Interp *interp, 
  332.                 int argc, char ** argv, int prefixCount,
  333.                 char *message));
  334. EXTERN void        Tix_CreateCommands _ANSI_ARGS_((
  335.                 Tcl_Interp *interp, Tix_TclCmd *commands,
  336.                 ClientData clientData,
  337.                 Tcl_CmdDeleteProc *deleteProc));
  338. EXTERN Tk_Window    Tix_CreateSubWindow _ANSI_ARGS_((
  339.                 Tcl_Interp * interp, Tk_Window tkwin,
  340.                 char * subPath));
  341. EXTERN int        Tix_DefinePixmap _ANSI_ARGS_((
  342.                 Tcl_Interp * interp, Tk_Uid name, char **data));
  343. EXTERN void        Tix_DrawAnchorLines _ANSI_ARGS_((
  344.                 Display *display, Drawable drawable,
  345.                 GC gc, int x, int y, int w, int h));
  346. EXTERN int        Tix_EvalArgv _ANSI_ARGS_((
  347.                     Tcl_Interp * interp, int argc, char ** argv));
  348. EXTERN int         Tix_ExistMethod _ANSI_ARGS_((Tcl_Interp *interp,
  349.                 char *context, char *method));
  350. EXTERN void        Tix_Exit _ANSI_ARGS_((Tcl_Interp * interp, int code));
  351. EXTERN Pixmap        Tix_GetRenderBuffer _ANSI_ARGS_((Display *display,
  352.                 Drawable d, int width, int height, int depth));
  353.  
  354. #ifdef TCL_VARARGS
  355. /*
  356.  * The TCL_VARARGS macro is only defined in Tcl 7.5 or later
  357.  */
  358. EXTERN int        Tix_GlobalVarEval _ANSI_ARGS_(
  359.                 TCL_VARARGS(Tcl_Interp *,interp));
  360. #else
  361. EXTERN int        Tix_GlobalVarEval _ANSI_ARGS_(
  362.                 VARARGS(Tcl_Interp *interp));
  363. #endif
  364.  
  365. EXTERN int        Tix_HandleSubCmds _ANSI_ARGS_((
  366.                 Tix_CmdInfo * cmdInfo,
  367.                 Tix_SubCmdInfo * subCmdInfo,
  368.                 ClientData clientData, Tcl_Interp *interp,
  369.                 int argc, char **argv));
  370. EXTERN int         Tix_Init _ANSI_ARGS_((Tcl_Interp *interp));
  371.  
  372. EXTERN int        Tix_LoadTclLibrary _ANSI_ARGS_((
  373.                 Tcl_Interp *interp, char *envName,
  374.                 char *tclName, char *initFile,
  375.                 char *defDir, char * appName));
  376. EXTERN void         Tix_OpenStdin _ANSI_ARGS_((Tcl_Interp *interp));
  377. EXTERN void         Tix_SetArgv _ANSI_ARGS_((Tcl_Interp *interp, 
  378.                 int argc, char **argv));
  379. EXTERN void        Tix_SetRcFileName _ANSI_ARGS_((
  380.                 Tcl_Interp * interp,  char * rcFileName));
  381.  
  382.  
  383. /*
  384.  * Commands exported by Tix
  385.  *
  386.  */
  387.  
  388. extern TIX_DECLARE_CMD(Tix_CallMethodCmd);
  389. extern TIX_DECLARE_CMD(Tix_ChainMethodCmd);
  390. extern TIX_DECLARE_CMD(Tix_ClassCmd);
  391. extern TIX_DECLARE_CMD(Tix_DoWhenIdleCmd);
  392. extern TIX_DECLARE_CMD(Tix_DoWhenMappedCmd);
  393. extern TIX_DECLARE_CMD(Tix_FalseCmd);
  394. extern TIX_DECLARE_CMD(Tix_FileCmd);
  395. extern TIX_DECLARE_CMD(Tix_FlushXCmd);
  396. extern TIX_DECLARE_CMD(Tix_FormCmd);
  397. extern TIX_DECLARE_CMD(Tix_GridCmd);
  398. extern TIX_DECLARE_CMD(Tix_GeometryRequestCmd);
  399. extern TIX_DECLARE_CMD(Tix_Get3DBorderCmd);
  400. extern TIX_DECLARE_CMD(Tix_GetBooleanCmd);
  401. extern TIX_DECLARE_CMD(Tix_GetIntCmd);
  402. extern TIX_DECLARE_CMD(Tix_GetMethodCmd);
  403. extern TIX_DECLARE_CMD(Tix_HListCmd);
  404. extern TIX_DECLARE_CMD(Tix_HandleOptionsCmd);
  405. extern TIX_DECLARE_CMD(Tix_InputOnlyCmd);
  406. extern TIX_DECLARE_CMD(Tix_ItemStyleCmd);
  407. extern TIX_DECLARE_CMD(Tix_ManageGeometryCmd);
  408. extern TIX_DECLARE_CMD(Tix_MapWindowCmd);
  409. extern TIX_DECLARE_CMD(Tix_MoveResizeWindowCmd);
  410. extern TIX_DECLARE_CMD(Tix_NoteBookFrameCmd);
  411. extern TIX_DECLARE_CMD(Tix_RaiseWindowCmd);
  412. extern TIX_DECLARE_CMD(Tix_ShellInputCmd);
  413. extern TIX_DECLARE_CMD(Tix_StringSubCmd);
  414. extern TIX_DECLARE_CMD(Tix_StrEqCmd);
  415. extern TIX_DECLARE_CMD(Tix_TListCmd);
  416. extern TIX_DECLARE_CMD(Tix_TmpLineCmd);
  417. extern TIX_DECLARE_CMD(Tix_TrueCmd);
  418. extern TIX_DECLARE_CMD(Tix_UnmapWindowCmd);
  419. extern TIX_DECLARE_CMD(Tix_MwmCmd);
  420. extern TIX_DECLARE_CMD(Tix_CreateWidgetCmd);
  421.  
  422. #define SET_RECORD(interp, record, var, value) \
  423.     Tcl_SetVar2(interp, record, var, value, TCL_GLOBAL_ONLY)
  424.  
  425. #define GET_RECORD(interp, record, var) \
  426.     Tcl_GetVar2(interp, record, var, TCL_GLOBAL_ONLY)
  427.  
  428.  
  429. #define TIX_HASHKEY(k) ((sizeof(k)>sizeof(int))?((char*)&(k)):((char*)(k)))
  430.  
  431. /*----------------------------------------------------------------------
  432.  * Compatibility section
  433.  *----------------------------------------------------------------------    */
  434.  
  435. #ifdef NO_STRDUP
  436. #define strdup tixStrDup
  437.  
  438. EXTERN char *         tixStrDup _ANSI_ARGS_((
  439.                 CONST char * s));
  440. #endif
  441.  
  442. #ifdef _WINDOWS
  443. #ifndef NO_STRCASECMP
  444. #define NO_STRCASECMP 1
  445. #endif
  446. #endif
  447.  
  448. #if defined(NO_STRCASECMP)
  449. #  ifndef strcasecmp
  450. #    define strcasecmp tixStrCaseCmp
  451. #  endif
  452. extern int        tixStrCaseCmp _ANSI_ARGS_((CONST char *s1,
  453.                 CONST char *s2));
  454. #endif
  455.  
  456.  
  457. #ifdef __cplusplus
  458. }
  459. #endif
  460.  
  461.  
  462. #endif /* RC_INVOKED */
  463. #endif /* _TIX_H_ */
  464.